package com.ruoyi.system.service.impl;

import java.io.InputStream;
import java.util.List;
import java.util.UUID;

import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.system.domain.DataMatching;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.AntiDumpingMapper;
import com.ruoyi.system.domain.AntiDumping;
import com.ruoyi.system.service.IAntiDumpingService;

/**
 * 反倾销海关编码Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-02-07
 */
@Service
public class AntiDumpingServiceImpl implements IAntiDumpingService 
{
    @Autowired
    private AntiDumpingMapper antiDumpingMapper;

    /**
     * 查询反倾销海关编码
     * 
     * @param id 反倾销海关编码主键
     * @return 反倾销海关编码
     */
    @Override
    public AntiDumping selectAntiDumpingById(String id)
    {
        return antiDumpingMapper.selectAntiDumpingById(id);
    }

    /**
     * 查询反倾销海关编码列表
     * 
     * @param antiDumping 反倾销海关编码
     * @return 反倾销海关编码
     */
    @Override
    public List<AntiDumping> selectAntiDumpingList(AntiDumping antiDumping)
    {
        return antiDumpingMapper.selectAntiDumpingList(antiDumping);
    }

    /**
     * 新增反倾销海关编码
     * 
     * @param antiDumping 反倾销海关编码
     * @return 结果
     */
    @Override
    public int insertAntiDumping(AntiDumping antiDumping)
    {
        return antiDumpingMapper.insertAntiDumping(antiDumping);
    }

    /**
     * 修改反倾销海关编码
     * 
     * @param antiDumping 反倾销海关编码
     * @return 结果
     */
    @Override
    public int updateAntiDumping(AntiDumping antiDumping)
    {
        return antiDumpingMapper.updateAntiDumping(antiDumping);
    }

    /**
     * 批量删除反倾销海关编码
     * 
     * @param ids 需要删除的反倾销海关编码主键
     * @return 结果
     */
    @Override
    public int deleteAntiDumpingByIds(String[] ids)
    {
        return antiDumpingMapper.deleteAntiDumpingByIds(ids);
    }

    /**
     * 删除反倾销海关编码信息
     * 
     * @param id 反倾销海关编码主键
     * @return 结果
     */
    @Override
    public int deleteAntiDumpingById(String id)
    {
        return antiDumpingMapper.deleteAntiDumpingById(id);
    }

    // 自定义读取单元格值的辅助方法
    private String getCellValue(Row row, int cellIndex) {
        Cell cell = row.getCell(cellIndex);
        if (cell == null) {
            return "";  // 如果单元格为空，返回空字符串
        }

        DataFormatter dataFormatter = new DataFormatter();
        String cellValue = dataFormatter.formatCellValue(cell);  // 以字符串形式读取单元格的值
        return cellValue.trim();
    }

    public JSONObject importExcelData(InputStream inputStream) throws Exception {
        Workbook workbook = new XSSFWorkbook(inputStream);
        Sheet sheet = workbook.getSheetAt(0);  // 获取第一个工作表
        JSONObject res = new JSONObject();
        int resNum = 0;
        int errorNum = 0;
        int rowCount = sheet.getPhysicalNumberOfRows();  // 获取总行数

        for (int i = 1; i < rowCount; i++) {  // 跳过表头，开始读取数据
            Row row = sheet.getRow(i);
            if (row == null) continue;

            AntiDumping commodityInfo = new AntiDumping();
            String id = UUID.randomUUID().toString().replace("-", "");
            commodityInfo.setId(id);

            // 获取单元格数据，并确保将其作为字符串处理
            String commodityCode = getCellValue(row, 0);  // 获取第一个单元格值（Commodity Code）
            String remarks = getCellValue(row, 1);  // 获取第二个单元格值（Remarks）

            commodityInfo.setCommodityCode(commodityCode);
            commodityInfo.setRemarks(remarks);

            try {
                if (antiDumpingMapper.insertAntiDumping(commodityInfo) > 0 ){
                    resNum++;
                }else{
                    errorNum++;
                }
            } catch (Exception e) {
                System.err.println("插入数据失败，行号：" + i + " 错误信息：" + e.getMessage());
            }
        }

        // 返回处理结果
        res.put("successNum", resNum);  // 成功的记录数
        res.put("errorNum", errorNum);  // 错误的记录数（减去表头行数）
        return res;
    }
}
